/* $Id: UtilityDomainObjectManager.java 
 * Copyright (C) 2011, TRAKHEES
 *  
 * Revision History
 *
 * Date  			Author 		    	Remarks
 * ---------------------------------------------------------------------------------
 *
 */
package ae.pcfc.etks.online.common.domain.manager;

import java.util.List;

import ae.pcfc.etks.online.common.domain.TTscCity;
import ae.pcfc.etks.online.common.domain.TTscClientRole;
import ae.pcfc.etks.online.common.domain.TTscClientRoleToDepartmentMap;
import ae.pcfc.etks.online.common.domain.TTscCountry;
import ae.pcfc.etks.online.common.domain.TTscDepartments;
import ae.pcfc.etks.online.common.domain.TTscEmirate;
import ae.pcfc.etks.online.common.domain.TTscEmirateCity;
import ae.pcfc.etks.online.common.domain.TTscLicIssuingAuthority;
import ae.pcfc.etks.online.common.domain.TTscLicType;
import ae.pcfc.etks.online.common.domain.TTscNametitle;
import ae.pcfc.etks.online.common.domain.TTscVisaType;
import ae.pcfc.etks.online.common.exception.LookupException;

public interface UtilityDomainObjectManager extends BaseDomainObjectManager{
	
	/**
	 * getCountryList
	 * Method to get country list based on locale
	 * @param locale
	 * @return
	 * @throws LookupException
	 * List<TTscCountry>
	 */
	public List<TTscCountry> getCountryList(String locale) throws LookupException;
	
	/**
	 * getLicType
	 * Method to get active license types
	 * @return
	 * @throws LookupException
	 * List<TTscLicType>
	 */
	public List<TTscLicType> getLicType() throws LookupException;
	
	/**
	 * getNameTitle
	 * Method to get active name titles
	 * @return
	 * @throws LookupException
	 * List<TTscNametitle>
	 */
	public List<TTscNametitle> getNameTitle() throws LookupException;
	
	/**
	 * getVisaType
	 * Method to get active visa types
	 * @return
	 * @throws LookupException
	 * List<TTscVisaType>
	 */
	public List<TTscVisaType> getVisaType() throws LookupException;
	
	/**
	 * getLicIssuingAuth
	 * Method to get license issuing authorities
	 * @return
	 * @throws LookupException
	 * List<TTscLicIssuingAuthority>
	 */
	public List<TTscLicIssuingAuthority> getLicIssuingAuth() throws LookupException;
	
	/**
	 * getCityListByCountryCode
	 * Method to find cities by country code and locale
	 * @param countryCode
	 * @param locale
	 * @return
	 * @throws LookupException
	 * List<TTscCity>
	 */
	public List<TTscCity> getCityListByCountryCode(String countryCode, String locale) throws LookupException;
	
	/**
	 * getClientRoleList
	 * Method to get client role list by client category
	 * @param clientCategory
	 * @param bHideDefault
	 * @return
	 * @throws LookupException
	 * List<TTscClientRole>
	 */
	public List<TTscClientRole> getClientRoleList(String clientCategory, boolean bHideDefault) throws LookupException;
	
	/**
	 * getDepartments
	 * Method to get all departments
	 * @return
	 * @throws LookupException
	 * List<TTscDepartments>
	 */
	public List<TTscDepartments> getDepartments() throws LookupException;
	
	/**
	 * getAvailableClientRoleList
	 * Method to get all available client roles 
	 * @param clientCategory
	 * @param roleList
	 * @return
	 * @throws LookupException
	 * List<TTscClientRole>
	 */
	public List<TTscClientRole> getAvailableClientRoleList(String clientCategory, List<String> roleList) throws LookupException;
	
	/**
	 * getLicIssuingAuthorityByCode
	 * Method to get license issuing authority by code
	 * @param licIACode
	 * @return
	 * @throws LookupException
	 * TTscLicIssuingAuthority
	 */
	public TTscLicIssuingAuthority getLicIssuingAuthorityByCode(String licIACode) throws LookupException;
	
	/**
	 * getNameTitleById
	 * Method to get name title domain object by id
	 * @param nameTitleId
	 * @return
	 * @throws LookupException
	 * TTscNametitle
	 */
	public TTscNametitle getNameTitleById(Long nameTitleId) throws LookupException;
	
	/**
	 * getCountryByCode
	 * Method to get country by code
	 * @param countryCode
	 * @return
	 * @throws LookupException
	 * TTscCountry
	 */
	public TTscCountry getCountryByCode(String countryCode) throws LookupException;
	
	/**
	 * getCityByCode
	 * Method to get city by code
	 * @param cityCode
	 * @return
	 * @throws LookupException
	 * TTscCity
	 */
	public TTscCity getCityByCode(String cityCode) throws LookupException;
	
	/**
	 * getVisaTypeByCode
	 * Method to get visa type by code
	 * @param visaCode
	 * @return
	 * @throws LookupException
	 * TTscVisaType
	 */
	public TTscVisaType getVisaTypeByCode(String visaCode) throws LookupException;

	/**
	 * findServiceDepartmentsByDepartmentId
	 * Method to get service departments by department codes
	 * @param departmentCodes
	 * @return
	 * List<TTscDepartments>
	 */
	public List<TTscDepartments> findServiceDepartmentsByDepartmentId(List<String> departmentCodes);

	/**
	 * getDepartmentById
	 * Method to get department by  default department code
	 * @param serviceDefaultDeptCode
	 * @return
	 * TTscDepartments
	 */
	public TTscDepartments getDepartmentById(String serviceDefaultDeptCode);
	
	/**
	 * getDepartmentByCode
	 * Method to get department by department code
	 * @param strDeptCode
	 * @return
	 * TTscDepartments
	 */
	public TTscDepartments getDepartmentByCode(String strDeptCode);
	
	/**
	 * getDepartmentsByRoleIds
	 * Method to get client role to department mappings by client role ids
	 * @param roleIds
	 * @return
	 * List<TTscClientRoleToDepartmentMap>
	 */
	public List<TTscClientRoleToDepartmentMap> getDepartmentsByRoleIds(List<String> roleIds);

	/**
	 * getAllLicIssuingAuth
	 * 
	 * @return
	 * List<TTscLicIssuingAuthority>
	 */
	public List<TTscLicIssuingAuthority> getAllLicIssuingAuth();

	
	public List<TTscEmirate> getEmirates(String locale) throws LookupException;
	
	
	public List<TTscEmirateCity> getEmirateCityByEmirateCode(String emirateCode, String locale)  throws LookupException;
}
